#pragma once

#include "glare.d3d11.Prerequisites.h"
#include "glare.core.GpuResource.h"
#include "glare.core.GpuResourceFactory.h"

namespace Glare {

	class D3D11GpuResourceInterface : public GpuResource::Interface
	{
	public : virtual ID3D11Resource* GetD3DResource() = 0;
	};

	class D3D11GpuResourceFactory : public GpuResourceFactory
	{
	public : D3D11GpuResourceFactory(D3D11Driver* driver);

	public : virtual GpuBuffer* CreateBuffer(const GpuBufferDescription& description);
	public : virtual Texture* CreateTexture(const TextureDescription& description);
	public : virtual ShaderResourceView* CreateShaderResourceView(GpuResource* resource, const ShaderResourceViewDescription& description);

	public : virtual Driver* GetDriver() const;

	public : D3D11Driver* GetD3DDriver() const;

	private : D3D11Driver* _driver;
	};

}
